libarchive: Support commit sizes metadata
authorDan Nicholson <nicholson@endlessm.com>
Thu, 24 Oct 2019 23:00:33 +0000 (17:00 -0600)
committerDan Nicholson <nicholson@endlessm.com>
Tue, 21 Jan 2020 03:42:27 +0000 (20:42 -0700)
Call the helper to set the generate_sizes boolean so that object size
data is stored while writing the mtree.

src/libostree/ostree-repo-commit.c
src/libostree/ostree-repo-libarchive.c
src/libostree/ostree-repo-private.h
tests/test-libarchive.sh

index 2294c84687b1f59a1dc999c05110a8172ba3b2b3..87b585fd5607654e797c651c5517c760d1ae192a 100644 (file)
@@ -348,9 +348,9 @@ content_size_cache_entry_free (gpointer entry)
     g_slice_free (OstreeContentSizeCacheEntry, entry);
 }
 
-static void
-repo_setup_generate_sizes (OstreeRepo               *self,
-                           OstreeRepoCommitModifier *modifier)
+void
+_ostree_repo_setup_generate_sizes (OstreeRepo               *self,
+                                   OstreeRepoCommitModifier *modifier)
 {
   if (modifier && modifier->flags & OSTREE_REPO_COMMIT_MODIFIER_FLAGS_GENERATE_SIZES)
     {
@@ -3923,7 +3923,7 @@ ostree_repo_write_directory_to_mtree (OstreeRepo                *self,
     }
   else
     {
-      repo_setup_generate_sizes (self, modifier);
+      _ostree_repo_setup_generate_sizes (self, modifier);
 
       g_autoptr(GPtrArray) path = g_ptr_array_new ();
       if (!write_directory_to_mtree_internal (self, dir, mtree, modifier, path,
@@ -3957,7 +3957,7 @@ ostree_repo_write_dfd_to_mtree (OstreeRepo                *self,
                                 GCancellable              *cancellable,
                                 GError                   **error)
 {
-  repo_setup_generate_sizes (self, modifier);
+  _ostree_repo_setup_generate_sizes (self, modifier);
 
   g_auto(GLnxDirFdIterator) dfd_iter = { 0, };
   if (!glnx_dirfd_iterator_init_at (dfd, path, FALSE, &dfd_iter, error))
index 1850f99f4cbe536b38fae2278fcc3e69d4058bb8..d55459f42e8cae48e0dc78afc97053b4866ec257 100644 (file)
@@ -844,6 +844,8 @@ ostree_repo_import_archive_to_mtree (OstreeRepo                   *self,
     .modifier = modifier
   };
 
+  _ostree_repo_setup_generate_sizes (self, modifier);
+
   while (TRUE)
     {
       int r = archive_read_next_header (a, &aictx.entry);
index bc2325e56ff372c22a2628b54b0ee90da4d8b09c..2864d81ea3fcd8c9fa007bfc6763c1bd7393bc72 100644 (file)
@@ -337,6 +337,10 @@ _ostree_repo_commit_modifier_apply (OstreeRepo               *self,
                                     GFileInfo                *file_info,
                                     GFileInfo               **out_modified_info);
 
+void
+_ostree_repo_setup_generate_sizes (OstreeRepo               *self,
+                                   OstreeRepoCommitModifier *modifier);
+
 gboolean
 _ostree_repo_remote_name_is_file (const char *remote_name);
 
index 24de55b223f57bedf0a6df8123702eb67a9264e0..174be800a32f4bb1d5a8b5c7b7980a153722eea8 100755 (executable)
@@ -28,7 +28,7 @@ fi
 
 . $(dirname $0)/libtest.sh
 
-echo "1..17"
+echo "1..18"
 
 setup_test_repository "bare"
 
@@ -234,3 +234,17 @@ for filter in '^usr/bin/,usr/sbin/' '/bin/,/sbin/'; do
     assert_file_has_content usr/lib/libfoo.so 'a library'
     echo "ok tar pathname filter modification: ${filter}"
 done
+
+# Test sizes metadata. This needs an archive repo, so a separate repo is used.
+cd ${test_tmpdir}
+rm -rf repo2
+ostree_repo_init repo2 --mode=archive
+${CMD_PREFIX} ostree --repo=repo2 commit \
+  -s "from tar" -b test-tar \
+  --generate-sizes \
+  --tree=tar=foo.tar.gz
+${CMD_PREFIX} ostree --repo=repo2 show --print-sizes test-tar > sizes.txt
+assert_file_has_content sizes.txt 'Compressed size (needed/total): 0[  ]bytes/1.1[  ]kB'
+assert_file_has_content sizes.txt 'Unpacked size (needed/total): 0[  ]bytes/900[  ]bytes'
+assert_file_has_content sizes.txt 'Number of objects (needed/total): 0/12'
+echo "ok tar sizes metadata"